Jackson এর মাধ্যমে Date এবং Time Object Serialization

Java Technologies - জ্যাকসন (Jackson) - Date এবং Time হ্যান্ডল করা
184

Java-তে Date এবং Time Serialization এবং Deserialization করার জন্য Jackson খুবই কার্যকর। তবে, ডিফল্ট সেটআপে java.util.Date, LocalDate, LocalDateTime ইত্যাদি Object-কে JSON-এ রূপান্তর করার সময় ফরম্যাটটি আপনার পছন্দ মতো নাও হতে পারে। এই সমস্যা সমাধানের জন্য আপনি Custom Date Format ব্যবহার করতে পারেন।


ডিফল্ট Date Serialization

উদাহরণ:

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Date;

public class DefaultDateExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();

            // Simple Object with Date
            Sample sample = new Sample(1, "Example", new Date());

            // Object থেকে JSON
            String json = objectMapper.writeValueAsString(sample);

            System.out.println("Default Date Serialized JSON: " + json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Sample {
    private int id;
    private String name;
    private Date date;

    public Sample(int id, String name, Date date) {
        this.id = id;
        this.name = name;
        this.date = date;
    }

    // Getters and Setters
}

ডিফল্ট JSON আউটপুট:

{"id":1,"name":"Example","date":1697774542997}

সমস্যা: ডিফল্ট Date Serialization Unix টাইমস্ট্যাম্প আকারে হয়। অনেক সময় এটি ব্যবহারকারী-বান্ধব নয়।


Custom Date Format ব্যবহার

Jackson-এ @JsonFormat এনোটেশন বা ObjectMapper কনফিগারেশন ব্যবহার করে Date ফরম্যাট কাস্টমাইজ করা যায়।

উদাহরণ: @JsonFormat এনোটেশন

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Date;

public class CustomDateExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();

            // Simple Object with Date
            CustomSample sample = new CustomSample(1, "Example", new Date());

            // Object থেকে JSON
            String json = objectMapper.writeValueAsString(sample);

            System.out.println("Custom Date Serialized JSON: " + json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class CustomSample {
    private int id;
    private String name;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date date;

    public CustomSample(int id, String name, Date date) {
        this.id = id;
        this.name = name;
        this.date = date;
    }

    // Getters and Setters
}

আউটপুট:

{"id":1,"name":"Example","date":"2024-12-21 12:45:30"}

Global Configuration with ObjectMapper

উদাহরণ:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class GlobalDateFormatExample {
    public static void main(String[] args) {
        try {
            // ObjectMapper Configuration
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.registerModule(new JavaTimeModule());
            objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            
            // Custom Object
            GlobalSample sample = new GlobalSample(1, "Example", LocalDateTime.now());

            // Serialize to JSON
            String json = objectMapper.writeValueAsString(sample);

            System.out.println("Global Custom Date Serialized JSON: " + json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class GlobalSample {
    private int id;
    private String name;
    private LocalDateTime dateTime;

    public GlobalSample(int id, String name, LocalDateTime dateTime) {
        this.id = id;
        this.name = name;
        this.dateTime = dateTime;
    }

    // Getters and Setters
}

আউটপুট:

{"id":1,"name":"Example","dateTime":"2024-12-21T12:45:30"}

Custom Serializer ব্যবহার করে Advanced Date Serialization

উদাহরণ:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class AdvancedDateSerialization {
    public static void main(String[] args) {
        try {
            // Custom Serializer
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.registerModule(new JavaTimeModule());
            
            // Custom Object
            AdvancedSample sample = new AdvancedSample(1, "Example", LocalDateTime.now());

            // Serialize to JSON
            String json = objectMapper.writeValueAsString(sample);

            System.out.println("Advanced Date Serialized JSON: " + json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class AdvancedSample {
    private int id;
    private String name;

    @com.fasterxml.jackson.databind.annotation.JsonSerialize(using = LocalDateTimeSerializer.class)
    private LocalDateTime dateTime;

    public AdvancedSample(int id, String name, LocalDateTime dateTime) {
        this.id = id;
        this.name = name;
        this.dateTime = dateTime;
    }

    // Getters and Setters
}

class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
    @Override
    public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        gen.writeString(value.format(formatter));
    }
}

আউটপুট:

{"id":1,"name":"Example","dateTime":"2024-12-21 12:45:30"}

সংক্ষেপে

  1. ডিফল্ট Serialization: Jackson Unix টাইমস্ট্যাম্প ব্যবহার করে।
  2. @JsonFormat: নির্দিষ্ট ফিল্ডের জন্য কাস্টম ফরম্যাট।
  3. Global Configuration: পুরো প্রজেক্টের জন্য একটি নির্দিষ্ট ফরম্যাট।
  4. Custom Serializer: আরও জটিল ফরম্যাটিং বা লজিক প্রয়োগের জন্য ব্যবহার করা হয়।

Jackson এর এই টেকনিকগুলো আপনাকে Java-তে Date এবং Time Object Serialization এবং Deserialization আরও নমনীয় ও কাস্টমাইজড করতে সহায়তা করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...